package com.mall.auth.service;

import com.mall.auth.entity.OAuth2User;
import com.mall.auth.entity.OAuth2Provider;

/**
 * OAuth2.0 服务接口
 */
public interface OAuth2Service {
    
    /**
     * 获取授权URL
     * 
     * @param provider 第三方提供商
     * @param redirectUri 回调地址
     * @return 授权URL
     */
    String getAuthorizationUrl(OAuth2Provider provider, String redirectUri);
    
    /**
     * 获取访问令牌
     * 
     * @param provider 第三方提供商
     * @param code 授权码
     * @param redirectUri 回调地址
     * @return 访问令牌
     */
    String getAccessToken(OAuth2Provider provider, String code, String redirectUri);
    
    /**
     * 刷新访问令牌
     * 
     * @param provider 第三方提供商
     * @param refreshToken 刷新令牌
     * @return OAuth2用户信息（包含新的访问令牌和刷新令牌）
     */
    OAuth2User refreshAccessToken(OAuth2Provider provider, String refreshToken);
    
    /**
     * 获取用户信息
     * 
     * @param provider 第三方提供商
     * @param accessToken 访问令牌
     * @return 用户信息
     */
    OAuth2User getUserInfo(OAuth2Provider provider, String accessToken);
    
    /**
     * 创建二维码内容
     * 
     * @param provider 第三方提供商
     * @param state 状态码，用于防止CSRF攻击
     * @return 二维码内容（URL）
     */
    String generateQRCodeContent(OAuth2Provider provider, String state);
}